/*
 * PruebaArchivoAuxiliar.cpp
 *
 *  Created on: 21/05/2013
 *      Author: jonathan
 */

#include "PruebaArchivoAuxiliar.h"
#include "../preproceso/archivos/ArchivoAuxiliar.h"
#include "../typedefs.hpp"
#include "../preproceso/estructuras/EntradaAuxiliar.h"
#include <string>
#include <list>
using namespace std;

void PruebaArchivoAuxiliar::after(){

}
void PruebaArchivoAuxiliar::before(){
	this->borrarArchivo("archivoAux");
}

void PruebaArchivoAuxiliar::run(){
	ResultadoTest resTotal("----------------TEST_ARCHIVO_AUXILIAR------------------");
	resTotal.assertTrue(this->escribirEntrada().getResultado(), "Test1");
	resTotal.getResultado();

}
ResultadoTest PruebaArchivoAuxiliar::escribirEntrada(){
	ResultadoTest res("escribirEntrada");
	ArchivoAuxiliar aux("archivoAux", ios_base::out);

	string termino = "Termino";
	EnteroLargo doc = 343;
	EnteroLargo pos = 10;

	EntradaAuxiliar ent(termino, doc);
	ent.addPosicion(pos);
	ent.addPosicion(30);
	aux.escribir(&ent);
	aux.escribir(&ent);
	aux.close();
	aux.open("archivoAux", ios_base::in);
	EntradaAuxiliar * ent2 = aux.next();
	res.assertTrue(ent2->getDocumento() == ent.getDocumento(), "Error leyendo el documento");
	res.assertTrue(ent2->getTermino() == ent.getTermino(), "Error leyendo el termino");
	list<EnteroLargo> & lista1 = ent.getPosiciones();
	list<EnteroLargo> & lista2 = ent2->getPosiciones();
	list<EnteroLargo>:: iterator it1;
	list<EnteroLargo>:: iterator it2 = lista2.begin();
	for(it1= lista1.begin(); it1!= lista1.end(); ++it1){
		res.assertTrue(*it1 == *it2, "Error leyendo posicion");
		it2++;
	}
	delete ent2;
	EntradaAuxiliar * ent3 = aux.next();



	res.assertTrue(ent3->getDocumento() == ent.getDocumento(), "Error leyendo el documento");
	res.assertTrue(ent3->getTermino() == ent.getTermino(), "Error leyendo el termino");
	lista1 = ent.getPosiciones();
	lista2 = ent3->getPosiciones();
	it2 = lista2.begin();
	for(it1= lista1.begin(); it1!= lista1.end(); ++it1){
		res.assertTrue(*it1 == *it2, "Error leyendo posicion");
		it2++;
	}
	delete ent3;
	return res;

}
